public class Tablero {

	public static final int AGUA = 0;

	public static final int LEFT = 0, TOPLEFT = 1, UP = 2, TOPRIGHT = 3,
			RIGHT = 4, BOTTRIGHT = 5, DOWN = 6, BOTTLEFT = 7;
	public static final Punto[] dirs = { new Punto(-1, 0), new Punto(-1, -1),
			new Punto(0, -1), new Punto(1, -1), new Punto(0, 1),
			new Punto(1, 1), new Punto(0, 1), new Punto(-1, 1) };

	int[][] tablero;
	int ancho, alto;

	public Tablero(int ancho, int alto) {
		tablero = new int[alto][ancho];
		this.ancho = ancho;
		this.alto = alto;
	}

	public void setValorCelda(Celda celda) {
		tablero[celda.fila][celda.col] = celda.valor;
	}

	public int getValorCelda(Celda celda) {
		return tablero[celda.fila][celda.col];
	}

	public boolean isEnTablero(Celda celda) {

		return celda.fila >= 0 && celda.fila < alto && celda.col >= 0
				&& celda.col < ancho;
	}

	private int getAdyacentes(Celda celda) {

		int c = 0;
		Celda ady = new Celda();
		for(int i = 0; i < dirs.length; i++) {
			ady.fila = celda.fila + dirs[i].y;
			ady.col = celda.col + dirs[i].x;
			
			if (isEnTablero(celda) && getValorCelda(ady) != AGUA)
				c++;
		}
		return c;
	}
	
	private boolean isCeldaLibre(Celda celda) {
		
		return isEnTablero(celda) && getAdyacentes(celda) == 0;
	}

	private boolean isAreaLibre(Celda celda, int dir, int num) {
		
		boolean libre = true;
		int deltaCol = dirs[dir].y;
		int deltaFila= dirs[dir].x;
		Celda celdaActual = new Celda(celda.fila, celda.col);
		
		int i = 0;
		while (libre && i < num) {			
			libre = isCeldaLibre(celdaActual);			
			celdaActual.fila+= deltaFila;
			celdaActual.col+= deltaCol;
			i++;			
		}
		
		return libre;	
	}
	
	public boolean colocaNave(Celda celda, int dir, int num) {
		return true;
	}
	
}
